import handlers from "./handlers/index.js";
import { isObject } from "./utils.js";

// 映射表：存储原始对象与代理对象的关系
const proxyMap = new WeakMap();

/**
 * 将对象转换为响应式
 * @param {*} target 原始对象
 * @returns
 */
export function reactive(target) {
  // 判断是否为对象
  if (!isObject) {
    return target;
  }
  // 若对象已经为代理对象，则直接返回已代理对象
  if (proxyMap.has(target)) {
    return proxyMap.get(target);
  }
  const proxy = new Proxy(target, handlers);
  // 将代理对象存入映射表中
  proxyMap.set(target, proxy);
  return proxy;
}
